<?php
header('Content-Type: application/json; charset=utf-8');

// 引入数据库配置
$dbConfig = include('db_config.php');

// 创建数据库连接
try {
    $dsn = "mysql:host=" . $dbConfig['host'] . ";dbname=" . $dbConfig['dbname'] . ";charset=" . $dbConfig['charset'];
    $pdo = new PDO($dsn, $dbConfig['username'], $dbConfig['password']);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 检查请求方法是否为 POST
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception('只支持 POST 方法');
    }

    // 获取文件 ID（要修改的文件记录的唯一标识符）
    $file_id = $_POST['file_id'];
    if (empty($file_id)) {
        throw new Exception('文件 ID 不能为空');
    }

    // 获取要修改的字段及其新值
    $user_id = $_POST['user_id'] ?? '';
    $file_title = $_POST['file_title'] ?? '';
    $file_link = $_POST['file_link'] ?? '';
    $file_intro = $_POST['file_intro'] ?? '';
    $file_cover = $_POST['file_cover'] ?? '';
    $file_icon = $_POST['file_icon'] ?? '';
    $file_remark = $_POST['file_remark'] ?? '';
    $upload_time = $_POST['upload_time'] ?? date('Y-m-d H:i:s'); // 使用当前时间或提供的时间
    $file_size = $_POST['file_size'] ?? '';
    $file_type = $_POST['file_type'] ?? '';
    $likes = $_POST['likes'] ?? '';
    $review_status = $_POST['review_status'] ?? '';
    $reviewer_id = $_POST['reviewer_id'] ?? '';
    $rejection_reason = $_POST['rejection_reason'] ?? '';

    // 构建更新语句和参数数组
    $updateFields = [];
    $params = [];

    if (!empty($user_id)) {
        $updateFields[] = '上传者用户的id = :user_id';
        $params[':user_id'] = $user_id;
    }
    if (!empty($file_title)) {
        $updateFields[] = '文件标题 = :file_title';
        $params[':file_title'] = $file_title;
    }
    if (!empty($file_link)) {
        $updateFields[] = '文件链接 = :file_link';
        $params[':file_link'] = $file_link;
    }
    if (!empty($file_intro)) {
        $updateFields[] = '文件介绍 = :file_intro';
        $params[':file_intro'] = $file_intro;
    }
    if (!empty($file_cover)) {
        $updateFields[] = '文件封面 = :file_cover';
        $params[':file_cover'] = $file_cover;
    }
    if (!empty($file_icon)) {
        $updateFields[] = '文件图标 = :file_icon';
        $params[':file_icon'] = $file_icon;
    }
    if (!empty($file_remark)) {
        $updateFields[] = '文件备注 = :file_remark';
        $params[':file_remark'] = $file_remark;
    }
    if (!empty($upload_time)) {
        $updateFields[] = '上传时间 = :upload_time';
        $params[':upload_time'] = $upload_time;
    }
    if (!empty($file_size)) {
        $updateFields[] = '文件大小 = :file_size';
        $params[':file_size'] = $file_size;
    }
    if (!empty($file_type)) {
        $updateFields[] = '文件格式 = :file_type';
        $params[':file_type'] = $file_type;
    }
    if (!empty($likes)) {
        $updateFields[] = '获赞数量 = :likes';
        $params[':likes'] = $likes;
    }
    if (!empty($review_status)) {
        $updateFields[] = '是否已审核 = :review_status';
        $params[':review_status'] = $review_status;
    }
    if (!empty($reviewer_id)) {
        $updateFields[] = '审核者的用户id = :reviewer_id';
        $params[':reviewer_id'] = $reviewer_id;
    }
    if (!empty($rejection_reason)) {
        $updateFields[] = '拒绝原因 = :rejection_reason';
        $params[':rejection_reason'] = $rejection_reason;
    }

    if (empty($updateFields)) {
        throw new Exception('至少需要提供一个要更新的字段');
    }

    // 更新数据库
    $updateFile = "UPDATE mi_file SET " . implode(', ', $updateFields) . " WHERE id = :file_id";
    $params[':file_id'] = $file_id;

    $stmt = $pdo->prepare($updateFile);
    foreach ($params as $key => $value) {
        $stmt->bindParam($key, $value, PDO::PARAM_STR);
    }
    $stmt->execute();

    // 返回成功结果
    $result = [
        'status' => 'success',
        'message' => '文件信息修改成功',
        'data' => [
            'file_id' => $file_id,
            'updated_fields' => array_keys($params)
        ]
    ];
    echo json_encode($result, JSON_UNESCAPED_UNICODE);

} catch (Exception $e) {
    // 捕获异常并返回错误信息
    $errorResult = [
        'status' => 'error',
        'message' => '文件信息修改失败：' . $e->getMessage()
    ];
    echo json_encode($errorResult, JSON_UNESCAPED_UNICODE);
}
?>